<?php

/**
 * Created by PhpStorm.
 * User: w-pc
 * Date: 2017/03/01
 * Time: 23:25
 * 分类处理不做新的数据表存储，使用时分割类型字符串，提取出关键字并显示，点击分类时到文章分类字段中模糊查询
 * 改变策略，使用type数据表，在数组中进行去重
 */

namespace Common\Model;
use Think\Model;

class ArticleModel extends Model{
    /**
     * @var \Model|string|Model
     * 0 为隐藏  1未显示  2为置顶  3为删除
     */
    private $_db = '';

    public function __construct() {
        $this->_db = M('article');
    }
    /**获取文章列表信息
     * @return mixed 返回文章列表
     */
    public function getArticleByList(){
        $list = $this->_db->where()->select();
        $i = 0;
        $article_list = array();
        foreach($list as $value){
            if($value['a_state']!=3){
                $article_list[$i] = $value;
                $i++;
            }
        }
        $article_list = array_reverse($article_list);
        return $article_list;
    }
    public function get_ArticleNumList($num){
        $article_list = $this->getArticleByList();
        $t_list = array();
        $n = $this->get_ArticleNum();
        if($num>$n) $num = $n;
        for ($i=0;$i<$num;$i++){
            $t_list[$i] = $article_list[$i];
        }
        return $t_list;
    }
    /**查询文章标题列表信息
     * @return mixed 返回文章列表
     */
    public function get_LikeArticleByList($select){
        $like['a_title'] = array('like','%'.$select.'%');
        $list = $this->_db->where($like)->select();
        $i = 0;
        $article_list = array();
        foreach($list as $value){
            if($value['a_state']!=3){
                $article_list[$i] = $value;
                $i++;
            }
        }
        $article_list = array_reverse($article_list);
        return $article_list;
    }
    /** 根据文章状态返回列表
     * @param $a_state 文章状态
     * @return mixed 返回文章列表
     */
    public function get_StateArticle($a_state){
        $where['a_state'] = $a_state;
        $list = $this->_db->where($where)->select();
        $list = array_reverse($list);
        return $list;
    }
    /**根据a_id返回单篇文章的信息
     * @param $a_id 文章a_id
     * @return mixed 返回单篇文章
     */
    public function getArticleByOne($a_id){
        $where['a_id'] = $a_id;
        $article = $this->_db->where($where)->find();
//        $article['a_type'] = $this->Type_Explode($article['a_type'],2,$a_id);
        return $article;
    }
    /**修改文章
     * @param $id 要修改文章的id
     * @param $data 修改的文章
     */
    public function set_UpdateArticle($a_id,$data){
        //对分类字符串进行处理，按照' '分割，再重新组合排列
//        $data['a_type'] = $this->Type_Explode($data['a_type'],1,$data['a_id']);
        $where['a_id'] = $a_id;
        $this->_db->where($where)->save($data);
    }
    /**添加文章
     * @param $data 要添加的文章
     */
    public function set_InsertArticle($data){
        $a_id = $this->_db->add($data);
//        $data['a_type'] = $this->Type_Explode($data['a_type'],1,$data['a_id']);
        return $a_id;
    }

    /**文章置顶
     * @param $a_id
     */
    public function set_Stick($a_id){
        $where['a_id'] = $a_id;
        $data = $this->getArticleByOne($a_id);
        if($data['a_state']==1) {
            $data['a_state'] = 2;
        }else if($data['a_state']==2){
            $data['a_state'] = 1;
        }else if($data['a_state']==3){
            $data['a_state'] = 1;
        }else if($data['a_state']==0){
            $data['a_state'] = 1;
        }
        $this->_db->where($where)->save($data);
    }

    /** 根据文章类型进行列表的模糊查询
     * @param $a_type 文章类型
     * @return mixed
     */
    public function get_TypeArticleList($a_type){
        $like['a_type'] = array('like','%'.$a_type.'%');
        $article_list = $this->_db->where($like)->select();
        return $article_list;
    }
    /**对文章分类字符串进行处理分割
     * @param $a_type 文章分类字符串
     * @param $type
     * @return mixed
     */
    public function Type_Explode($a_type,$type,$a_id){
        $str = '';
        if($type==1){ //用于保存输入值
            $a_type = trim($a_type);
            $str_arr = explode(' ',$a_type);
//            foreach ($str_arr as $value){
//                $str = $str.','.$value;
//            }
            $this->set_TypeSave($str_arr,$a_id);
            //用于保存目录列表
//            $type_list = $this->get_TypeList();
//            $i = sizeof($type_list) + 1;
//            foreach ($str_arr as $value){
//                $type_list[$i] = $value;
//            }
        }else if($type==2){  //用于编辑时的显示
            $type_list = $this->get_TypeList();
            foreach ($type_list as $value){
                if($value['t_a_id']==$a_id){
                    $str = $str.' '.$value['t_name'];
                }
            }
//            $str_arr = explode(',',$a_type);
//            foreach ($str_arr as $value){
//                $str = $str.' '.$value;
//            }
        }
        return $str;
    }
    public function set_TypeSave($type_list,$a_id){
//        $list = M('article_type')->where()->select();
        foreach ($type_list as $value){
            $type['t_name'] = $value;
            $type['t_a_id'] = $a_id;
            M('article_type')->where($type)->save();
//            $isin = in_array($value,$list);
//            if($isin){}
        }
    }
    /**查找分类的列表
     * @return mixed
     */
    public function get_TypeList(){
        $type_list = M('article_type')->where()->select();
//        $i = 0;
//        foreach ($type_list as $value){
//            $list[$i] = $value['t_name'];
//            $i = $i + 1;
//        }
//        $list = array_unique($list);
        return $type_list;
    }
    /**
     * 显示文章数量
     */
    public function get_ArticleNum(){
        $list = $this->getArticleByList();
        return sizeof($list);
    }
    /** 根据页数处理文章列表
     * @param $page 当前页数
     * @param $article_list 要显示的文章列表
     * @return array 返回的文章列表
     *
     * 先计算总的页数，使用模运算，如果能整除，则余数为0，如果不为0则加一
     *
     */
    public function get_PageArticleList($page,$data_list,$pageNum){
        $t_list = array();
        $j = 0;
        $num = sizeof($data_list);
        if($num%$pageNum!=0){
            (int)$pageNo = $num / $pageNum + 1;
        }else{
            (int)$pageNo = $num / $pageNum;
        }
        if($page>$pageNo){
            $page = $pageNo;
        }
        if($page<1){
            $page = 1;
        }
        for ($i=$page*$pageNum-$pageNum;$i<$page*$pageNum;$i++){
            if($i>$num-1) break;
            $t_list[$j] = $data_list[$i];
            $j = $j + 1;
        }
        return $t_list;
    }
    public function get_PageList($page,$type,$a_key,$a_state,$pageNo){
        if($page<1) $page = 1;
        $i = 0;
        if($page!=1){
            $page_list[$i]['num'] = '«';
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        if(($page-2)>=1){
            $page_list[$i]['num'] = $page-2;
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&page='.($page-2).'&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        if(($page-1)>=1){
            $page_list[$i]['num'] = $page-1;
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&page='.($page-1).'&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        $page_list[$i]['class'] = 'am-active';
        $page_list[$i]['num'] = $page;
        $page_list[$i]['href'] = '#';
        $i = $i + 1;
        if(($page+1)<=$pageNo){
            $page_list[$i]['num'] = $page+1;
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&page='.($page+1).'&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        if(($page+2)<=$pageNo){
            $page_list[$i]['num'] = $page+2;
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&page='.($page+2).'&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        if($page!=$pageNo){
            $page_list[$i]['num'] = '»';
            $page_list[$i]['href'] = '/admin.php?c='.$type.'&a=index&page='.($pageNo).'&'.$a_key.'='.$a_state;
            $i = $i + 1;
        }
        return $page_list;
    }
    /**文章图片上传
     * @param $a_id 文章id
     * @param $a_photo 图片地址
     */
    public function upload_Photo($a_id,$a_photo){
        $article = $this->getArticleByOne($a_id);
        $article['a_photo'] = $a_photo;
        $this->set_UpdateArticle($a_id,$article);
    }
}